import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;

import java.util.stream.Stream;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)//指定测试用例执行顺序
public class JunitTest {
    public static Stream<Arguments> Generate() {
        //返回的数据
        return Stream.of(
                Arguments.arguments("张三",18),
                Arguments.arguments("李四",19),
                Arguments.arguments("王五",20)
        );
    }

    @Order(1)
    @Test
    void test2(){
        System.out.println("==========第二条测试用例=========");
    }
    @Order(2)
    @Test
    void test1(){
        System.out.println("=========第一条测试用例========");
    }
    //单参数
    @ParameterizedTest//注册参数
    @ValueSource(ints = {1,2,3,4})//注册参数
    void test3(int x){
        System.out.println("接收的参数是x=" + x);
    }
    //多参数
    @ParameterizedTest
    @CsvSource({"'张三',18"})
    void test4(String name,int age){
        System.out.println(name + "今年" + age + "岁");
    }
    //多参数读取文件中的数据进行操作
    @ParameterizedTest
    @CsvFileSource(resources = "test01.csv")
    void test5(String name,int age){
        System.out.println("name:" + name +  "age:" + age);
    }
    //通过方法生成测试数据
    @ParameterizedTest
    @MethodSource("Generate")
    void test6(String name,int age){
        System.out.println("姓名：" + name +" " + "年龄" + age);
    }

    @BeforeAll
    static void start(){//需要用static修饰
        System.out.println("**********开始测试**********");
    }
    @AfterAll
    static void end(){
        System.out.println("**********结束测试**********");
    }

//    @BeforeEach
//    void startv1(){
//        System.out.println("**********开始执行一条测试用例**********");
//    }
//    @AfterEach
//    void endv1(){
//        System.out.println("**********执行一条测试结束**********");
//    }
}
